//
//  F2DSprite.m
//  Framework2D
//
//  Created by Silvina Roldan on 31/05/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "F2DSprite.h"

@implementation F2DSprite

@synthesize atlas = _atlas;
@synthesize spriteName = _spriteName;
@synthesize transform = _transform;


- (id) init 
{
    if (self = [super init])
    {
        
        self.transform = [[F2DTransform alloc] init];
    }    
    return self;
}

- (void) update{
};

- (void) update:(float)dt{
};

- (void) draw{
    
    glDisable(GL_DEPTH_TEST);
    glDepthMask(FALSE);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_TEXTURE_2D);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    
    // Que habilito y que no. habilitar vertex array (posiciones de vertices)
    // para que sepa que datos va a recibir
    glEnableClientState(GL_VERTEX_ARRAY);    
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    
    
    // Decirle a la GPU donde se encuentran las posiciones de los vertices
    // le digo como ubicarlo en memoria. Esto lo define la aplicacion y no el pipeline.
    
    // Esto es cuanto me muevo en bytes para llegar a la proxima posicion
    // &_vertices[0].Position con esto le digo donde arranca el primer vertice
    
    glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].Position);    
    glColorPointer(4, GL_FLOAT, sizeof(Vertex), &_vertices[0].Color);
    glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].UV);    
    glBindTexture(GL_TEXTURE_2D, _atlas.texture.name);
    
    //NSLog(@"%@",self.spriteName);
    //aplicar la transformacion del objeto
    glPushMatrix();
    
    //Transform* t = self.owner.transform;
    
    // Modifico la matriz
    glTranslatef(self.transform.position.x, self.transform.position.y, 0);
    glRotatef(0, 0, 0, 1);
    glScalef(self.transform.scale.width, self.transform.scale.height, 1);
    
    // dibujar
    // 4 datos de vertices v1 v0 v2 y el segundo por v2 v3 v4
    // Defino la topologia que uso, en este caso GL_TRIANGLE_STRIP
    // La topologia le dice como recorrerlos
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    
    // Vuelve al estado de la matriz anterior
    glPopMatrix();

};

@end
